1. 赋值 -> 对于赋值运算来说,list1 与 list2 指向的是同一个内存地址,所以他们是完全一样的。

list1 = [1, 2, [4, 5, 6], 3]
list2 = list1

print(id(list1)) # 内存地址 -> 3015280854472
print(id(list2)) # 内存地址 -> 3015280854472

2. 浅拷贝 ->对于浅拷贝来说,只是在内存中重新创建了开辟了一个空间存放一个新列表,但是新列表中的元素与原列表中的元素是公用的

  • .copy()

list1 = [1, 2, [4, 5, 6], 3]
list2 = list1.copy()

list1[2][1] = '修改了'
print(list1) # [1, 2, [4, '修改了', 6], 3]
print(list2) # [1, 2, [4, '修改了', 6], 3]

3. 深拷贝 -> 对于深copy来说,列表是在内存中重新创建的,列表中可变的数据类型是重新创建的,列表中的不可变的数据类型是公用的 -> 需要引入 copy 模块
  • import copy
  • copy.deepcopy(xxx)

import copy

list1 = [1, 2, [4, 5, 6], 3]
list2 = copy.deepcopy(list1)

list1[2][1] = '修改了'
print(list1) # [1, 2, [4, '修改了', 6], 3]
print(list2) # [1, 2, [4, 5, 6], 3]